package com.smart.community.property.service;

import com.smart.community.property.vo.DashboardDataVO;
import com.smart.community.property.vo.DashboardKpiVO;
import com.smart.community.property.vo.DashboardTrendVO;
import com.smart.community.property.vo.DashboardInspectionVO;
import com.smart.community.property.vo.DashboardBillingStandardVO;

import java.util.List;

/**
 * 驾驶舱Service接口
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
public interface DashboardService {

    /**
     * 获取驾驶舱完整数据
     * 
     * @param propertyCompanyId 物业公司ID
     * @return 驾驶舱完整数据
     * @throws Exception 统一异常
     */
    DashboardDataVO getDashboardData(Long propertyCompanyId) throws Exception;

    /**
     * 获取KPI指标数据
     * 
     * @param propertyCompanyId 物业公司ID
     * @return KPI指标数据
     * @throws Exception 统一异常
     */
    DashboardKpiVO getKpiData(Long propertyCompanyId) throws Exception;

    /**
     * 获取趋势数据
     * 
     * @param propertyCompanyId 物业公司ID
     * @param months 统计月数
     * @return 趋势数据
     * @throws Exception 统一异常
     */
    DashboardTrendVO getTrendData(Long propertyCompanyId, Integer months) throws Exception;

    /**
     * 获取安全检查数据
     * 
     * @param propertyCompanyId 物业公司ID
     * @return 安全检查数据
     * @throws Exception 统一异常
     */
    DashboardInspectionVO getInspectionData(Long propertyCompanyId) throws Exception;

    /**
     * 获取收费标准数据
     * 
     * @param propertyCompanyId 物业公司ID
     * @return 收费标准数据
     * @throws Exception 统一异常
     */
    List<DashboardBillingStandardVO> getBillingStandardData(Long propertyCompanyId) throws Exception;

    /**
     * 检查用户是否有指定物业公司权限
     * 
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 是否有权限
     * @throws Exception 统一异常
     */
    boolean hasPropertyCompanyPermission(Long userId, Long propertyCompanyId) throws Exception;

    /**
     * 检查用户是否有任何物业公司权限
     * 
     * @param userId 用户ID
     * @return 是否有权限
     * @throws Exception 统一异常
     */
    boolean hasAnyPropertyCompanyPermission(Long userId) throws Exception;
}
